<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

if(!function_exists('is_ajax'))
{
    function is_ajax()
    {
        if(isset($_SERVER['HTTP_X_REQUESTED_WITH']))
        {
            if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') return true;
        }
        return false;
    }
}

if(!function_exists('sys_skin'))
{
    function sys_skin()
    {
        $ci = &get_instance();
        return $ci->input->cookie('skin') ? $ci->input->cookie('skin') : 'green';
    }
}


if(!function_exists('skin_url'))
{
    function skin_url()
    {
        $useragent = $_SERVER['HTTP_USER_AGENT'];
        $skin_url = 'statics/saas/scm/app2_beta';
        if(strstr($useragent, 'Chrome'))
        {
            $skin_url = 'statics/saas/scm/app2_release';
        }
        return base_url($skin_url);
    }
}

if(!function_exists('token'))
{
    function token($str = '')
    {
        $ci = &get_instance();
        if(!$str)
        {
            $data['token'] = md5(time() . uniqid());
            set_cookie('token', $data['token'], 120000);
            return $data['token'];
        }
        else
        {
            $post = $ci->input->get_post('token');
            $token = get_cookie('token');
            if(isset($token) && isset($post) && $post == $token)
            {
                set_cookie('token', '', 120000);
                return true;
            }
            return false;
        }
    }
}

if(!function_exists('alert'))
{
    function alert($str, $url = '')
    {
        $str = $str ? 'alert("' . $str . '");' : '';
        $url = $url ? 'location.href="' . $url . '";' : 'history.go(-1);';
        die('<script>' . $str . $url . '</script>');
    }
}

if(!function_exists('str_enhtml'))
{
    function str_enhtml($str)
    {
        if(!is_array($str)) return addslashes(htmlspecialchars(trim($str)));
        foreach($str as $key => $val)
        {
            $str[$key] = str_enhtml($val);
        }
        return $str;
    }
}

if(!function_exists('str_nohtml'))
{
    function str_nohtml($str)
    {
        if(!is_array($str)) return stripslashes(htmlspecialchars_decode(trim($str)));
        foreach($str as $key => $val)
        {
            $str[$key] = str_nohtml($val);
        }
        return $str;
    }
}

if(!function_exists('str_alert'))
{
    function str_alert($status = 200, $msg = 'success', $data = array())
    {
        $msg = array(
            'status' => $status,
            'msg' => $msg,
            'data' => $data,
        );
        return die(json_encode($msg));
    }
}

if(!function_exists('str_check'))
{
    function str_check($t0, $t1)
    {
        if(strlen($t0) < 1) return false;
        switch($t1)
        {
            case 'en':
                $t2 = '/^[a-zA-Z]+$/';
                break;
            case 'cn':
                $t2 = '/[\u4e00-\u9fa5]+/u';
                break;
            case 'int':
                $t2 = '/^[0-9]*$/';
                break;
            case 'price':
                $t2 = '/^\d+(\.\d+)?$/';
                break;
            case 'username':
                $t2 = '/^[a-zA-Z0-9_]{5,20}$/';
                break;
            case 'password':
                $t2 = '/^[a-zA-Z0-9_]{6,16}$/';
                break;
            case 'email':
                $t2 = '/^[\w\-\.]+@[a-zA-Z0-9]+\.(([a-zA-Z0-9]{2,4})|([a-zA-Z0-9]{2,4}\.[a-zA-Z]{2,4}))$/';
                break;
            case 'tel':
                $t2 = '/^((\(\+?\d{2,3}\))|(\+?\d{2,3}\-))?(\(0?\d{2,3}\)|0?\d{2,3}-)?[1-9]\d{4,7}(\-\d{1,4})?$/';
                break;
            case 'mobile':
                $t2 = '/^(\+?\d{2,3})?0?1(3\d|5\d|8\d)\d{8}$/';
                break;
            case 'idcard':
                $t2 = '/(^([\d]{15}|[\d]{18}|[\d]{17}x)$)/';
                break;
            case 'qq':
                $t2 = '/^[1-9]\d{4,15}$/';
                break;
            case 'url':
                $t2 = '/^(http|https|ftp):\/\/[a-zA-Z0-9]+\.[a-zA-Z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\'\'])*$/';
                break;
            case 'ip':
                $t2 = '/^((25[0-5]|2[0-4]\d|(1\d|[1-9])?\d)\.){3}(25[0-5]|2[0-4]\d|(1\d|[1-9])?\d)$/';
                break;
            case 'file':
                $t2 = '/^[a-zA-Z0-9]{1,50}$/';
                break;
            case 'zipcode':
                $t2 = '/^\d{6}$/';
                break;
            case 'filename':
                $t2 = '/^[a-zA-Z0-9]{1,50}$/';
                break;
            case 'date':
                $t2 = '/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/';
                break;
            case 'time':
                $t2 = '/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$/';
                break;
            case 'utf8':
                $t2 = '%^(?:
							[\x09\x0A\x0D\x20-\x7E] # ASCII
							| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
							| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
							| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
							| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
							| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
							| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
							| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
							)*$%xs';
                break;
            default:
                $t2 = '';
                break;
        }
        $pour = @preg_match($t2, $t0);
        if($pour)
        {
            return $t0;
        }
        else
        {
            return false;
        }
    }
}

if(!function_exists('str_num2rmb'))
{
    function str_num2rmb($num)
    {
        $c1 = "零壹贰叁肆伍陆柒捌玖";
        $c2 = "分角元拾佰仟万拾佰仟亿";
        $num = round($num, 2);
        $num = $num * 100;
        if(strlen($num) > 10)
        {
            return "oh,sorry,the number is too long!";
        }
        $i = 0;
        $c = "";
        while(1)
        {
            if($i == 0)
            {
                $n = substr($num, strlen($num) - 1, 1);
            }
            else
            {
                $n = $num % 10;
            }
            $p1 = substr($c1, 3 * $n, 3);
            $p2 = substr($c2, 3 * $i, 3);
            if($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元')))
            {
                $c = $p1 . $p2 . $c;
            }
            else
            {
                $c = $p1 . $c;
            }
            $i = $i + 1;
            $num = $num / 10;
            $num = (int)$num;
            if($num == 0)
            {
                break;
            }
        }
        $j = 0;
        $slen = strlen($c);
        while($j < $slen)
        {
            $m = substr($c, $j, 6);
            if($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零')
            {
                $left = substr($c, 0, $j);
                $right = substr($c, $j + 3);
                $c = $left . $right;
                $j = $j - 3;
                $slen = $slen - 3;
            }
            $j = $j + 3;
        }
        if(substr($c, strlen($c) - 3, 3) == '零')
        {
            $c = substr($c, 0, strlen($c) - 3);
        }
        return $c . "整";
    }
}

if(!function_exists('str_money'))
{
    function str_money($num, $f = 2)
    {
        $str = $num ? number_format($num, $f, '.', ',') : '';
        return $str;
    }
}

if(!function_exists('str_random'))
{
    function str_random($len, $chars = 'ABCDEFJHIJKMNOPQRSTUVWSYZ')
    {
        $str = '';
        $max = strlen($chars) - 1;
        for($i = 0; $i < $len; $i++)
        {
            $str .= $chars[mt_rand(0, $max)];
        }
        return $str;
    }
}

if(!function_exists('str_quote'))
{
    function str_quote($str)
    {
        $str = explode(',', $str);
        foreach($str as $v)
        {
            $arr[] = "'$v'";
        }
        return isset($arr) ? join(',', $arr) : '';
    }
}

if(!function_exists('str_no'))
{
    function str_no($str = '')
    {
        return $str . date("YmdHis") . rand(0, 9);
    }
}

if(!function_exists('str_unicode_decode'))
{
    function str_unicode_decode($unistr, $encoding = 'GBK', $prefix = '&#', $postfix = ';')
    {
        $arruni = explode($prefix, $unistr);
        $unistr = '';
        for($i = 1, $len = count($arruni); $i < $len; $i++)
        {
            if(strlen($postfix) > 0)
            {
                $arruni[$i] = substr($arruni[$i], 0, strlen($arruni[$i]) - strlen($postfix));
            }
            $temp = intval($arruni[$i]);
            $unistr .= ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);
        }
        return iconv('UCS-2', $encoding, $unistr);
    }
}


if(!function_exists('str_auth'))
{
    function str_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0)
    {
        $key_length = 4;
        $key = md5($key != '' ? $key : 'ci');
        $fixedkey = md5($key);
        $egiskeys = md5(substr($fixedkey, 16, 16));
        $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(md5(microtime(true)), -$key_length) : substr($string, 0, $key_length)) : '';
        $keys = md5(substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16));
        $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length));

        $i = 0;
        $result = '';
        $string_length = strlen($string);
        for($i = 0; $i < $string_length; $i++)
        {
            $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32}));
        }
        if($operation == 'ENCODE')
        {
            return $runtokey . str_replace('=', '', base64_encode($result));
        }
        else
        {
            if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $egiskeys), 0, 16))
            {
                return substr($result, 26);
            }
            else
            {
                return '';
            }
        }
    }
}


if(!function_exists('dir_add'))
{
    function dir_add($dir, $mode = 0777)
    {
        if(is_dir($dir) || @mkdir($dir, $mode)) return true;
        if(!dir_add(dirname($dir), $mode)) return false;
        return @mkdir($dir, $mode);
    }
}

if(!function_exists('dir_del'))
{
    function dir_del($dir)
    {
        $dir = str_replace('\\', '/', $dir);
        if(substr($dir, -1) != '/') $dir = $dir . '/';
        if(!is_dir($dir)) return false;
        $list = glob($dir . '*');
        foreach($list as $v)
        {
            is_dir($v) ? dir_del($v) : @unlink($v);
        }
        return @rmdir($dir);
    }
}

if(!function_exists('sys_csv'))
{
    function sys_csv($name)
    {
        header("Content-type:text/xls");
        header("Content-Disposition:attachment;filename=" . $name);
        header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
        header('Expires:0');
        header('Pragma:public');
    }
}

if(!function_exists('array_column'))
{
    function array_column(array $array, $columnKey, $indexKey = null)
    {
        $result = array();
        foreach($array as $subArray)
        {
            if(!is_array($subArray))
            {
                continue;
            }
            elseif(is_null($indexKey) && array_key_exists($columnKey, $subArray))
            {
                $result[] = $subArray[$columnKey];
            }
            elseif(array_key_exists($indexKey, $subArray))
            {
                if(is_null($columnKey))
                {
                    $result[$subArray[$indexKey]] = $subArray;
                }
                elseif(array_key_exists($columnKey, $subArray))
                {
                    $result[$subArray[$indexKey]] = $subArray[$columnKey];
                }
            }
        }
        return $result;
    }
}


if(!function_exists('upload'))
{
    function upload($file, $dir, $file_name = '', $file_size = 20480000, $ext = array('jpg', 'png', 'gif', 'ico'))
    {
        $name = $_FILES[$file]['name'];
        $size = $_FILES[$file]['size'];
        $type = $_FILES[$file]['type'];
        $tmp = $_FILES[$file]['tmp_name'];
        if(!empty($_FILES[$file]['error']))
        {
            switch($_FILES[$file]['error'])
            {
                case '1':
                    $error = '超过php.ini允许的大小';
                    break;
                case '2':
                    $error = '超过表单允许的大小';
                    break;
                case '3':
                    $error = '图片只有部分被上传';
                    break;
                case '4':
                    $error = '请选择图片';
                    break;
                case '6':
                    $error = '找不到临时目录';
                    break;
                case '7':
                    $error = '写文件到硬盘出错';
                    break;
                case '8':
                    $error = 'File upload stopped by extension';
                    break;
                case '999':
                default:
                    $error = '未知错误。';
            }
            alert($error);
        }
        if(!is_dir($dir)) dir_add($dir);
        if(!is_writable($dir)) return false;
        $file_ext = strtolower(trim(substr(strrchr($name, '.'), 1)));
        if(!$file_name) $file_name = date('YmdHis') . rand(1000, 9999);
        $file_name = $file_name . '.' . $file_ext;
        $path = $dir . $file_name;
        if(!in_array($file_ext, $ext)) return false;
        if($size > $file_size) return false;
        if(!move_uploaded_file($tmp, $path))
        {
            return false;
        }
        else
        {
            $info = array(
                "old_name" => $name,
                "new_name" => $file_name,
                "path" => $path,
                "size" => $size,
                "ext" => $file_ext,
                "type" => $type
            );
            return $info;
        }
    }
}

if(!function_exists('get_order_status'))
{
    /**
     * 获取订单状态
     * @param array $orderArray 一条订单记录
     * @return string
     * @date   2019/01/10
     * @author longli
     */
    function get_order_status($orderArray)
    {
        $retStr = "";
        if(is_array($orderArray) && !empty($orderArray))
        {
            $checked = $orderArray['checked'];
            if($checked <= 1 && $orderArray['billStatus'] == -1)
                $retStr = $checked == 0 ? "未审核" : "已审核";
            else
            {
                switch($orderArray['billStatus'])
                {
                    case '0':
                        $retStr = "未出库";
                        break;
                    case '2':
                        $retStr = "全部出库";
                        break;
                    case '10':
                        $retStr = "部分出库";
                        break;
                    case '11':
                        $retStr = "打印发货单";
                        break;
                    case '20':
                        $retStr = "锁定库存";
                        break;
                }
            }

        }
        return $retStr;
    }
}


 
 
